# encoding: UTF-8

class Usuarios::AdministradorController < ApplicationController

  layout "application"

  before_filter :verifica_administrador

  # O administrador pode criar outros administradores
  # mas apenas o especial pode remover e editar outros administradores

  def novo
    @administrador = Usuarios::Administrador.new()
  end

  def criar
    @administrador = Usuarios::Administrador.new(params[:administrador])
    respond_to do |format|
      if @administrador.criar
        Log.create(:login => @usuario_logado.login, :mensagem => t('usuarios/administrador.create_success') + " (#{@administrador.login})")
        flash[:notice] = t('usuarios/administrador.create_success')
        format.html {redirect_to :action => :listar}
        format.js {
          render :update do |page|
            page.redirect_to(:action => :listar)
          end
        }
      else
        format.html {redirect_to :action => :listar, :alert => t('usuarios/administrador.create_fail')}
        format.js {
          render :update do |page|
            page.select('.erro_form').each do |div|
              div.hide
            end
            page.select('.noicon').each do |div|
              div.hide
            end
            @administrador.errors.each do |atributo, erro|
              page.replace_html("erro_#{atributo}", erro)
              page.show("erro_#{atributo}")
              page.show("noiconid_#{atributo}")
            end
            page << "loaded();"
          end
        }
      end
    end
  end
  
  def editar
    # Controle para que apenas o administrador especial seja capaz de editar os demais
    # ou que os administradores sejam capazes de se editar
    if @administrador_logado.verifica_id_especial
      @administrador = Usuarios::Administrador.buscar_ativos(:id => params[:id]).first
    else
      @administrador = @administrador_logado
    end
    
    if @administrador
      @administrador.confirmacao_senha = @administrador.senha
    else
      flash[:alert] = t('usuarios/administrador.not_found')
      redirect_to :action => :listar
    end
  end
  
  def atualizar
    # Controle para que apenas o administrador especial seja capaz de editar os demais
    # ou que os administradores sejam capazes de se editar
    if @administrador_logado.verifica_id_especial
      @administrador = Usuarios::Administrador.buscar_ativos(:id => params[:administrador][:id]).first
    else
      @administrador = @administrador_logado
      params[:administrador][:id] = @administrador_logado.id.to_s # Impede que seja forçado um novo id
    end
    
    respond_to do |format|
      if @administrador
        @administrador.attributes = params[:administrador]
        if @administrador.atualizar(params[:administrador])
          Log.create(:login => @usuario_logado.login, :mensagem => t('usuarios/administrador.update_success') + " (#{@administrador.login})")
          flash[:notice] = t('usuarios/administrador.update_success')
          format.html {redirect_to :action => :listar}
          format.js {
            render :update do |page|
              page.redirect_to(:action => :listar)
            end
          }
        else
          format.html {redirect_to :action => :listar, :alert => t('usuarios/administrador.update_fail')}
          format.js {
            render :update do |page|
              page.select('.erro_form').each do |div|
                div.hide
              end
              page.select('.noicon').each do |div|
                div.hide
              end
              @paciente.errors.each do |atributo, erro|
                page.replace_html("erro_#{atributo}", erro)
                page.show("erro_#{atributo}")
                page.show("noiconid_#{atributo}")
              end
              page << "loaded();"
            end
          }
        end
      else
        flash[:alert] = t('usuarios/administrador.not_found')
        format.html {redirect_to :action => :listar}
        format.js {
          render :update do |page|
            page.redirect_to(:action => :listar)
          end
        }
      end
    end
  end
  
  def listar
    if params[:filtro]
      @administradores = Usuarios::Administrador.where("login LIKE ? AND CONCAT_WS(' ', nome, sobrenome) LIKE ? AND ativo = 1",
                                                       "%#{params[:filtro][:login]}%", "%#{params[:filtro][:nome]}%")
                                                .paginate(:page => params[:page], :per_page => 10).order('login')
      @filtro_params = {:login => params[:filtro][:login], :nome => params[:filtro][:nome]}
    else
      @administradores = Usuarios::Administrador.where(:ativo => true).paginate(:page => params[:page], :per_page => 10).order('login')
    end
  end
  
  def remover
    if @administrador_logado.verifica_id_especial
      @administrador = Usuarios::Administrador.buscar_ativos(:id => params[:id]).first
      if @administrador
        if @administrador.remover
          Log.create(:login => @usuario_logado.login, :mensagem => t('usuarios/administrador.remove_success') + " (#{@administrador.login})")
          flash[:notice] = t('usuarios/administrador.remove_success')
        else
          flash[:alert] = t('usuarios/administrador.remove_fail')
        end
      else
        flash[:alert] = t('usuarios/administrador.not_found')
      end
    else
      flash[:alert] = t('application.access_denied')
    end
    redirect_to :action => :listar
  end
  
  def visualizar
    @administrador = Usuarios::Administrador.buscar_ativos(:id => params[:id]).first
    if @administrador
      @administrador.confirmacao_senha = @administrador.senha
    else
      flash[:alert] = t('usuarios/administrador.not_found')
      redirect_to :action => :listar
    end
  end

end
